import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getTimeStamp, getToken, removeToken } from '@/utils/auth'
import { config } from '@vue/test-utils'
import router from '@/router'
// 定义超时时间
const TimeOut = 3600

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})
// 设置请求拦截
service.interceptors.request.use(config => {
  // 如果有了token就给请求添加请求头,携带上token
  if (store.getters.token) {
    // 判断token有没有过期
    let nowTimeStamp = Date.now()
    if ((nowTimeStamp - getTimeStamp()) / 1000 >= TimeOut) {
      // 清除数据
      store.dispatch('user/logout')
      // 跳转首页
      router.push({ path: '/login' })
      Message.error('登录状态失效了，请重新登录')
      return
    }
    config.headers['Authorization'] = `Bearer ${store.getters.token}`
  }
  return config
}, error => {
  return Promise.reject(error);
})


// 设置响应拦截
service.interceptors.response.use(response => {
  // 判断是否登录成功
  if (response.data.success) {
    return response.data
  } else {
    // 登录失败，返回错误提示
    return Promise.reject(response.data.message)
  }
}, error => {
  //  判断是不是token过期
  if (error.response.data.code === 10002) {
    // 如果是token过期，则提示，并跳转到登录页
    Message.error('登录状态已过期，请重新登录')
    // 删除token，不删除是不会跳转过期的，因为有路由守卫，让他又调回来了
    removeToken()
    // 直接调用logout就可以退出了
    store.dispatch('user/logout')
    router.push({ path: '/login' })
    // 如果不想看到报错，就在这里return
    return
  }
  return Promise.reject(error);
})


export default service
